package com.yang.core.model;

import lombok.Builder;
import lombok.Data;

import java.util.Map;

/**
 * HTTP响应包装类
 */
@Data
@Builder
public class HttpResponse<T> {

    /**
     * 状态码
     */
    private int statusCode;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 响应体（原始字符串）
     */
    private String body;

    /**
     * 内容长度
     */
    private int contentLength;

    /**
     * 响应时间（毫秒）
     */
    private long responseTime;

    /**
     * 响应头
     */
    private Map<String, String> headers;

    /**
     * 响应消息
     */
    private String message;

    /**
     * 是否成功
     */
    public boolean isSuccess() {
        return statusCode >= 200 && statusCode < 300;
    }

    /**
     * 是否客户端错误
     */
    public boolean isClientError() {
        return statusCode >= 400 && statusCode < 500;
    }

    /**
     * 是否服务器错误
     */
    public boolean isServerError() {
        return statusCode >= 500 && statusCode < 600;
    }

    /**
     * 获取响应头
     */
    public String getHeader(String name) {
        return headers != null ? headers.get(name) : null;
    }

    /**
     * 获取Content-Type
     */
    public String getContentType() {
        return getHeader("Content-Type");
    }

    /**
     * 获取响应体
     */
    public String getBody() {
        return body;
    }
}